package com.zp.self.module.level_4_算法练习.数据结构.hash表;

import org.junit.Test;

import java.util.HashSet;

/**
 * @author By ZengPeng
 */
public class 力扣_804_唯一摩尔斯密码词 {
    @Test
    public void main() {

        System.out.println(uniqueMorseRepresentations(new String[]{"gin", "zen", "gig", "msg"}));
    }

    /**
    题目：国际摩尔斯密码定义一种标准编码方式，将每个字母对应于一个由一系列点和短线组成的字符串， 比如:
     'a' 对应 ".-" ，
     'b' 对应 "-..." ，
     'c' 对应 "-.-." ，以此类推。
     为了方便，所有 26 个英文字母的摩尔斯密码表如下：
     [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
     给你一个字符串数组 words ，每个单词可以写成每个字母对应摩尔斯密码的组合。
     例如，"cab" 可以写成 "-.-..--..." ，(即 "-.-." + ".-" + "-..." 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。
     对 words 中所有单词进行单词翻译，返回不同 单词翻译 的数量。

     示例 1：
     输入: words = ["gin", "zen", "gig", "msg"]
     输出: 2
     解释:
     各单词翻译如下:
     "gin" -> "--...-."
     "zen" -> "--...-."
     "gig" -> "--...--."
     "msg" -> "--...--."
     共有 2 种不同翻译, "--...-." 和 "--...--.".

     示例 2：
     输入：words = ["a"]
     输出：1

    分析：【P 💔】
       1.Hash存储：遍历、翻译、用HashSet去重
                --执行用时：1 ms, 在所有 Java 提交中击败了100.00%的用户
                --时长：3分钟

    边界值 & 注意点：
       1.
     **/
    private  String[] map = new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-.."
            ,"--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    public int uniqueMorseRepresentations(String[] words) {
        HashSet<String> result = new HashSet<>();
        for (String word : words) {
            StringBuilder sb = new StringBuilder();
            for (char s : word.toCharArray())
                sb.append(map[s-'a']);
            result.add(sb.toString());
        }
        return result.size();
    }
}
